package br.org.acessobrasil.processoacessibilidade.dao;

import java.util.Date;
import java.util.List;

import javax.persistence.Query;

import br.org.acessobrasil.processoacessibilidade.vo.ErroOuAvisoPro;
import br.org.acessobrasil.processoacessibilidade.vo.PaginaPro;
import br.org.acessobrasil.processoacessibilidade.vo.SitioPro;

public class ErroOuAvisoDao extends SuperDao<ErroOuAvisoPro>{

	@Override
	public ErroOuAvisoPro find(long id) {
		return null;
	}
	
	public List<ErroOuAvisoPro> getErrosP3Acessibilidade(SitioPro sitio, Date dataGerada){
		Query q = getEntityManager().createQuery("Select lista From RelatorioAcessibilidadePro relatorio" +
		" inner join relatorio.listErroP3 prioridade inner join prioridade.listOcorrencia lista where relatorio.pagina.idSitio=:idSitio" +
		" and relatorio.dataGerada=:dataGerada ");
		q.setParameter("idSitio", sitio.getId());
		q.setParameter("dataGerada", dataGerada);
		return q.getResultList();
	}
	public List<ErroOuAvisoPro> getErrosP2Acessibilidade(SitioPro sitio, Date dataGerada){
		Query q = getEntityManager().createQuery("Select lista From RelatorioAcessibilidadePro relatorio" +
		" inner join relatorio.listErroP2 prioridade inner join prioridade.listOcorrencia lista where relatorio.pagina.idSitio=:idSitio" +
		" and relatorio.dataGerada=:dataGerada ");
		q.setParameter("idSitio", sitio.getId());
		q.setParameter("dataGerada", dataGerada);
		return q.getResultList();
	}
	public List<ErroOuAvisoPro> getErrosP1Acessibilidade(SitioPro sitio, Date dataGerada){
		Query q = getEntityManager().createQuery("Select lista From RelatorioAcessibilidadePro relatorio" +
		" inner join relatorio.listErroP1 prioridade inner join prioridade.listOcorrencia lista where relatorio.pagina.idSitio=:idSitio" +
		" and relatorio.dataGerada=:dataGerada ");
		q.setParameter("idSitio", sitio.getId());
		q.setParameter("dataGerada", dataGerada);
		return q.getResultList();
	}
	public List<ErroOuAvisoPro> getErrosHtml(SitioPro sitio, Date dataGerada){
		Query q = getEntityManager().createQuery("Select lista From RelatorioAcessibilidadePro relatorio" +
		" inner join relatorio.listErroXHTML prioridade inner join prioridade.listOcorrencia lista where relatorio.pagina.idSitio=:idSitio" +
		" and relatorio.dataGerada=:dataGerada ");
		q.setParameter("idSitio", sitio.getId());
		q.setParameter("dataGerada", dataGerada);
		return q.getResultList();
	}

	public List<PaginaPro> getListPaginaComErro(String codTextoRegra,SitioPro sitio, Date dataGerada) {
		Query q = getEntityManager().createQuery("Select distinct relatorio.pagina From RelatorioAcessibilidadePro relatorio" +
		" left join relatorio.listErroP3 prioridade3 left join prioridade3.listOcorrencia lista3 " +
		" left join relatorio.listErroP2 prioridade2 left join prioridade2.listOcorrencia lista2 " +
		" left join relatorio.listErroP1 prioridade1 left join prioridade1.listOcorrencia lista1 " +
		" where relatorio.pagina.idSitio=:idSitio and relatorio.dataGerada=:dataGerada and " +
		" (lista3.codTextoRegra=:codTextoRegra or lista2.codTextoRegra=:codTextoRegra" +
		" or lista1.codTextoRegra=:codTextoRegra )");
		q.setParameter("idSitio", sitio.getId());
		q.setParameter("codTextoRegra", codTextoRegra);
		q.setParameter("dataGerada", dataGerada);
		return q.getResultList();
	}
}
